package editorsvg.propiedades;

import editorsvg.editor.atributos.AtrPintura;
import editorsvg.editor.atributos.Atributo;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Paint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComponent;

/**
 * Propiedad que contiene un objeto Pintura.
 *
 * @author Jorge Berjano
 */
public class PropiedadPintura extends Propiedad {

    private JButton botonEdicion;
    private Image imagenColor;
    private static final ImageIcon imagenNone = new ImageIcon(PropiedadPintura.class.getResource("none.png"));
//
//    /** Constructor por defecto */
//    public PropiedadPintura() {
//    }

    public PropiedadPintura(String nombre) {
        super(nombre);
    }

    public PropiedadPintura(String nombre, String nombreAtributoXml) {
        super(nombre, nombreAtributoXml);
    }

    public Paint getPintura() {
        Atributo atributo = getAtributo();
        if (atributo instanceof AtrPintura) {
            return ((AtrPintura) atributo).getValor();
        } else {
            return null;
        }
    }

    public void colorearImagen(Paint paint) {

        if (imagenColor == null) {
            imagenColor = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB);
        }
        Graphics2D g = (Graphics2D) imagenColor.getGraphics();
        g.setPaint(paint);
        g.fillRect(0, 0, 10, 10);

    }

    @Override
    public JComponent obtenerComponenteModificacion() {
        if (botonEdicion == null) {
            botonEdicion = new JButton();
//            if (getPintura() == null) {
//                botonEdicion = new JButton("...");
//            } else {
//                botonEdicion = new JButton(new ImageIcon(imagenColor));
//            }
            botonEdicion.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent evento) {
                    BotonPulsado(evento);
                }
            });
        }
        actualizarBoton();

        return botonEdicion;
    }

    private void actualizarBoton() {
        
        if (botonEdicion == null) {
            return;
        }
        
        Atributo atributo = getAtributo();
        if (!(atributo instanceof AtrPintura)) {
            return;
        }
                
        AtrPintura atributoPintura = ((AtrPintura) atributo);
        if (atributoPintura.isNone()) {
                botonEdicion.setIcon(imagenNone);
                botonEdicion.setText(null);
                return;
            }
        
        Paint pintura = atributoPintura.getValor();
        
        if (pintura != null) {       
            colorearImagen(pintura);
            botonEdicion.setIcon(new ImageIcon(imagenColor));
            botonEdicion.setText(null);
        } else {
            botonEdicion.setIcon(null);
            botonEdicion.setText("...");
        }        
    }
    // Si se pulsa el bot�n se muestra el dialogo de selecci�n de fuente
    // Al aceptar el di�logo se cambia la fuente del par�metro.
    private void BotonPulsado(ActionEvent evento) {
        Paint pintura = getPintura();
        Color color = pintura instanceof Color ? (Color) pintura : null;
        Color nuevoColor = JColorChooser.showDialog(null, "Color para la propiedad " + getNombreCampo(), color);
        if (nuevoColor != null) {
            parsearPropiedad(String.format("#%06X", nuevoColor.getRGB() & 0xFFFFFF));
        }
        actualizarBoton();
    }

    @Override
    public boolean parsearPropiedad(String texto) {
        boolean b = super.parsearPropiedad(texto);
        //colorearImagen();
        actualizarBoton();
        return b;
    }

    @Override
    public boolean permitirEditarTexto() {
        return true;
    }
}
